package providers

import (
	"fmt"
	"path/filepath"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

// @TODO 因为同一个包里面的 init 调用顺序是看编译器排序的，但变量的声明赋值是在 init 之前的,由此来保障配置文件在最前面
// 配置文件对象
var Config = getConfig()

func getConfig() *viper.Viper {
	Config := viper.New()
	fmt.Println(RootPath)
	// 设置配置位置
	Config.AddConfigPath(filepath.Join(RootPath, "config"))
	Config.SetConfigName("config")
	Config.SetConfigType("toml")

	if err := Config.ReadInConfig(); err != nil {
		panic("读取配置文件失败!,原因:" + err.Error())
	}

	// 动态读取配置文件,不需要重启
	Config.WatchConfig()
	Config.OnConfigChange(func(in fsnotify.Event) {
		Logger.Infof("配置文件已修改成功.修改的配置文件名为:%s", in.Name)
	})

	return Config
}
